package com.lagou.mr.numcount;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/*
* 需求：
*     输入文件中的每行内容均为一个数字， 即一个数据，
*     要求在输出中每行有两个数字(制表符分隔)，其中， 第一个代表原始数据在原始数据集中排序的序号， 第二个代表原始数据
* 实现思路：
*     1 确定输入输出
*          map：输出 key：IntWritable value: null
*          reduce: 输出 key: Text （即代表第二个原始数据在当前集中排序的序号\t原始数据) value: NullWritable
*     2 排序方式
*         shuffle会自动对map输出的IntWritable进行排序，只要分区设置一个，reduce task设置一个，在reduce阶段就会都输出到一个文件
*         对于输出文件中对原始数据序号的数据（可以看作为行号），可以在reduce中输出数据时，不断累加
* */
public class NumSortMapper extends Mapper<LongWritable, Text, IntWritable, NullWritable> {
    IntWritable k = new IntWritable();
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        int s = Integer.parseInt(value.toString());
        k.set(s);
        context.write(k, NullWritable.get());
    }
}
